package modelo.Tests;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import modelo.AlgoHero.*;

import org.w3c.dom.Document;
import org.w3c.dom.Element;


import junit.framework.TestCase;

public class CancionTest extends TestCase {
	
	private CompasTest testCompas;
	private Integer velocidad = 10;
	
	public CancionTest (){
		
		testCompas = new CompasTest ();
	}
	
	public Cancion getCancion1(){
		
		Cancion cancion = new Cancion (velocidad);
		
		cancion.add(this.testCompas.getCompas1());
		cancion.add(this.testCompas.getCompas2());
		
		return cancion;
	}
	public Cancion getCancion2(){
		
		Cancion cancion = new Cancion (velocidad);
		
		cancion.add(this.testCompas.getCompas1());
		
		return cancion;
		
	}
	
	public CancionTraducida getCancionTraducida1(){
		
		CancionTraducida cancionT = new CancionTraducida (this.velocidad);
		
		cancionT.add(this.testCompas.getCompasTraducido1());
		cancionT.add(this.testCompas.getCompasTraducido2());
		
		return cancionT;
		
		
	}
	
	public Element crearNodo() throws ParserConfigurationException
	{
		  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		  DocumentBuilder db = dbf.newDocumentBuilder(); 
	   	  Document doc = db.newDocument();
	   	  Element elemento = doc.createElement("cancion");	
		  elemento.setAttribute("figura", "NEGRA");
	      elemento.setAttribute("cantFiguras", "41");
	   	  elemento.setAttribute("valorRedonda", "444");
	   	  return elemento;	   	
	}
	
	public Element crearHijos(Element elemento)
	{
		Document doc = elemento.getOwnerDocument();
	 	Element newElement = doc.createElement("compas");	 	
		elemento.appendChild(newElement);		
		return elemento;
	}
	
	public void testComparacion (){
		
		CancionTraducida cancionTraducida1 = this.getCancionTraducida1();
		CancionTraducida cancionTraducida2 = this.getCancionTraducida1();		
		assertTrue (cancionTraducida1.compareTo(cancionTraducida2));
	}

	public void testTraduccion (){
		
		CancionTraducida cancionTraducida1;

		cancionTraducida1 = (CancionTraducida) this.getCancion1().traducir();
			
		assertTrue(cancionTraducida1.compareTo(this.getCancionTraducida1()));
				
	}
			
	public void testDeserialize () throws ParserConfigurationException{
		Element elemento = crearNodo();
		Cancion cancion = new Cancion();
		cancion.Deserialize(elemento);
		assertTrue((Duracion.getDuracion() != null));
	}
	
	public void testDeserializeChildrens () throws ParserConfigurationException{
		Element elemento = crearNodo();
		elemento = crearHijos(elemento);
		Cancion cancion = new Cancion();
		cancion.Deserialize(elemento);
		assertTrue(!(cancion.isEmpty()));
	}
	
}
